var errorDescription = "Customer error";
function main() {		
	var collection;
	var customer;
	var customerBranch;
	var trader;
	var traderBranch;
	var traderID;	
	var custID;
	var id = null;
    var codeVal;
    var nameVal;
	var useTIN;
	var warnings = "";
	
	var logger = sc$APIContext.GetActionLogger();
	var dic = sc$Context.JsonDeserialize(sc$APIContext.GetImportBuffer());
	
	//return sc$Context.JsonSerialize("19");
    collection = sc$Context.DataObjects.NewMaster("Hercules", "Customers");
    trader = collection[0];
    customer = collection[0].Customers[0];
    collection.Logic.DisableConstraints();

    if (dic.ContainsKey( "CstmCode" )) {    
        customer.SetValue("Code", dic["CstmCode"]);    
    }
    if (dic.ContainsKey( "CstmName" )) {
        customer.SetValue("Name", dic["CstmName"]);
    }	
	if (dic.ContainsKey("CstmTIN")){
        trader.SetValue("CntcTIN", dic["CstmTIN"]);
    }
	
	if (dic.ContainsKey( "TrdrProfessionID" )) {		
         trader.SetValue("CntcPrfsID", dic["TrdrProfessionID"]);
    }	
	
	if (dic.ContainsKey( "TaxOID" )) {		
         trader.SetValue("TffcID", dic["TaxOID"]);
    }
		
	
	//return sc$Context.JsonSerialize(dic["CstmName"]);
	errorDescription = "Customer :  " + customer.Name;

    if ((dic.ContainsKey( "CstmActive" )) && ((Convert.ToString(dic["CstmActive"])).length > 0)) {
        customer.SetValue("Active", Convert.ToInt16(dic["CstmActive"]));
    }


    traderBranch = collection[0].TraderBranches[0];
    if (dic.ContainsKey( "TrBrName" )) {
        traderBranch.SetValue("Name", dic["TrBrName"]);
    }
	if (dic.ContainsKey( "TrBrStrtName" )) {
        traderBranch.SetValue("Street", dic["TrBrStrtName"]);		
    }
	if (dic.ContainsKey( "TrBrStreetNumber" )) {
        traderBranch.SetValue("StreetNumber", dic["TrBrStreetNumber"]);		
    }
	if (dic.ContainsKey( "TrBrPostalCode" )) {
        traderBranch.SetValue("PostalCode", dic["TrBrPostalCode"]);
    }
	if (dic.ContainsKey( "TrBrPhone1" )) {
        traderBranch.SetValue("Phone1", dic["TrBrPhone1"]);
    }

    if (dic.ContainsKey( "TrBrEmail" )) {
        traderBranch.SetValue("Email", dic["TrBrEmail"]);
    }

    if (dic.ContainsKey("TrBrCityName")){					       
        traderBranch.SetValue("City", dic("TrBrCityName"));
    }
	customerBranch = traderBranch.CustomerBranches[0];
    //collection[0].TraderBranches.Add(traderBranch);	
    //if (traderBranch != undefined) {
    //    customerBranch = traderBranch.CustomerBranches[0];		
    //}	

    if (dic.ContainsKey( "CstmKEPYOStatus" )) {
        sc$ApplImportScript.UpdateInt16Value(customer, "KEPYOStatus", dic["CstmKEPYOStatus"]); 		
    }

    // if (dic.ContainsKey( "CurrencyCode" ) || dic.ContainsKey( "CurrencyName" )){            
    //     codeVal = null;
	// 	nameVal = null;
	// 	if (dic.ContainsKey( "CurrencyCode" )) {
    //         codeVal = dic["CurrencyCode"];
    //     }
    //     if (dic.ContainsKey( "CurrencyName" )){					
    //         nameVal = dic["CurrencyName"];
    //     }
    //     ProcessLookupItem(codeVal, nameVal, "heCurrencies", "CurrID", customer);			
    // }			
    if (dic.ContainsKey( "CstmComments" )) {
        customer.SetValue("Comments", dic["CstmComments"]);
    }
	

    customer.EndEdit();
	trader.EndEdit();


	sc$Context.DataObjects.ExternalDataFix("Hercules", "Customers", collection);
	var logger = sc$ApplImportScript.SaveFromImport("Hercules", "Customers", collection);
	warnings = sc$ApplImportScript.AppendLoggerWarnings(logger, warnings);	

	logger.Merge(logger);
	
	var outDic = new scDictionary();
	outDic["Cookie"]  = sc$APIContext.GetCookie();
	outDic["EntityId"] = customer.ID;
	outDic["AddressID"] = customerBranch.ID;
	outDic["Messages"] = logger;

	return sc$Context.JsonSerialize(outDic);
}


function ProcessLookupItem(codeVal, nameVal, lookupTable, propName, entity, extraPropName, extraPropValue, lookupVersion){	
	var recID = sc$ApplImportScript.FindArrayCodeNameRecord(lookupTable, codeVal, nameVal, lookupVersion);
	if (recID == undefined){
		if (extraPropName != undefined && extraPropValue != undefined) {			
			var extraProps : Array = [extraPropName];
			var extraPropVals : Array = [extraPropValue];
			
			recID = sc$ApplImportScript.PostArrayCodeNameRecord(lookupTable, codeVal, nameVal, extraProps, extraPropVals, 
																errorDescription, lookupVersion);			
		}
		else {
			recID = sc$ApplImportScript.PostArrayCodeNameRecord(lookupTable, codeVal, nameVal, null, null, 
																errorDescription, lookupVersion);		
		}
		if (recID != undefined) {
			entity.SetValue(propName, recID); 
		}
	}	
	else {
		entity.SetValue(propName, recID); 
	}	
}


function ProcessAddressLookupItem(codeVal, nameVal, lookupTable, propName, entity, extraPropName, extraPropValue, lookupVersion){	
	var extraProps : Array;
	var extraPropVals : Array;
	var recID;
	
	if (extraPropName != undefined && extraPropValue != undefined) {			
		extraProps = [extraPropName];
		extraPropVals = [extraPropValue];
		recID = sc$ApplImportScript.FindArrayCodeNameRecord(lookupTable, codeVal, nameVal, extraProps, extraPropVals);
		if (recID == undefined){
			recID = sc$ApplImportScript.PostArrayCodeNameRecord(lookupTable, codeVal, nameVal, extraProps, extraPropVals, 
																errorDescription, lookupVersion);
		}		
	}
	else {
		recID = sc$ApplImportScript.FindArrayCodeNameRecord(lookupTable, codeVal, nameVal);
		if (recID == undefined){
			recID = sc$ApplImportScript.PostArrayCodeNameRecord(lookupTable, codeVal, nameVal, null, null, 
																errorDescription, lookupVersion);
		}
	}	
	if (recID != undefined) {
		entity.SetValue(propName, recID); 
	}
}